package com.song.winter.context;

import java.util.List;

public interface ApplicationContext extends AutoCloseable {

    /**
    *是否存在指定name的bean
    *
    */
    boolean containsBean(String name);

    /**
     *根据name返回唯一bean 未找到抛出noSuchBeanDefinition
     * @param name
     * @return
     * @param <T>
     */
    <T> T getBean(String name);

    /**
     *根据name返回唯一bean 未找到抛出noSuchBeanDefinition,找到但type不符合抛出BeanNotOfRequiredTypeException
     * @param name
     * @param requiredType
     * @return
     * @param <T>
     */
    <T> T getBean(String name,Class<T> requiredType);

    /**
     * 根据type找到唯一的bean 未找到抛出noSuchBeanDefinitionException;
     * @param requiredType
     * @return
     * @param <T>
     */
    <T> T getBean(Class<T> requiredType);

    /**
     * 根据type 返回一组bean 未找到返回空list
     * @param requiredType
     * @return
     * @param <T>
     */
    <T> List<T> getBeans(Class<T> requiredType);

    /**
     *关闭并执行所有bean的destroy方法
     */
    void close();

}
